
package jp.ize.iwp.avm1.text;

// {{{ imports

import flash.MovieClip;
import jp.ize.iwp.avm1.events.EventDispatcher;
import jp.ize.iwp.avm1.display.Sprite;

// }}}

class TextField extends EventDispatcher
{
	// {{{ properties

	public var id:String;
	public var textfield:flash.TextField;
	public var _defaultTextFormat:flash.TextFormat;
	public var classname:String;

	public static var index:Int = 0;
	public static var prefix:String = "__iwptxt";

	public var defaultTextFormat(getDefaultTextFormat,setDefaultTextFormat):flash.TextFormat;
	public var x(getX,setX):Float;
	public var y(getY,setY):Float;
	public var visible(getVisible,setVisible):Bool;
	public var selectable(getSelectable,setSelectable):Bool;
	public var width(getWidth,setWidth):Float;
	public var height(getHeight,setHeight):Float;
	public var textWidth(getTextWidth,setTextWidth):Float;
	public var textHeight(getTextHeight,setTextHeight):Float;
	public var type(getType,setType):String;
	public var autoSize(getAutoSize,setAutoSize):String;
	public var text(getText,setText):String;
	public var multiline(getMultiline,setMultiline):Bool;
	public var textColor(getTextColor,setTextColor):Int;
	public var border(getBorder,setBorder):Bool;
	public var borderColor(getBorderColor,setBorderColor):Int;
	public var background(getBackground,setBackground):Bool;
	public var backgroundColor(getBackgroundColor,setBackgroundColor):Int;

	// }}}
	// {{{ public function new() : Void

	public function new() : Void
	{
		super();
		untyped {
			classname = this.__class__.__name__.join(".");
		}
		id = prefix + Std.string(index);
		index++;
	}

	// }}}
	// {{{ public function setParent( p:Dynamic ) : Void

	public function setParent( p:Dynamic ) : Void
	{
		//createTextField(instanceName : String, depth : Int, x : Float, y : Float, width : Float, height : Float) : TextField;
		var x:Float = 0;
		var y:Float = 0;
		var w:Float = 100;
		var h:Float = 20;
		#if flash8
		if ( Std.is(p,MovieClip) ) {
			textfield = p.createTextField(id,p.getNextHighestDepth(),x,y,w,h);
		} else if ( Std.is(p,Sprite) ){
			textfield = p.graphics.createTextField(id,p.graphics.getNextHighestDepth(),x,y,w,h);
		}
		#elseif flash
		if ( Std.is(p,MovieClip) ) {
			p.createTextField(id,p.getNextHighestDepth(),x,y,w,h);
		} else if ( Std.is(p,Sprite) ){
			p.graphics.createTextField(id,p.graphics.getNextHighestDepth(),x,y,w,h);
		}
		untyped textfield = p[id];
		#end
		initTextField();
	}
	
	// }}}	
	// {{{ public function initTextField() : Void

	public function initTextField() : Void
	{
		visible = true;
	}

	// }}}
	
	// {{{ public function remove() : Void

	public function remove() : Void
	{
		textfield.removeTextField();
	}

	// }}}

	// {{{ public function getX() : Float
	
	public function getX() : Float
	{
		return textfield._x;
	}

	// }}}
	// {{{ public function setX( v:Float ) : Float
	
	public function setX( v:Float ) : Float
	{
		textfield._x = v;
		return v;
	}

	// }}}
	// {{{ public function getY() : Float
	
	public function getY() : Float
	{
		return textfield._y;
	}

	// }}}
	// {{{ public function setY( v:Float ) : Float
	
	public function setY( v:Float ) : Float
	{
		textfield._y = v;
		return v;
	}

	// }}}
	// {{{ public function getVisible() : Bool
	
	public function getVisible() : Bool
	{
		return textfield._visible;
	}

	// }}}
	// {{{ public function setVisible( v:Bool ) : Bool
	
	public function setVisible( v:Bool ) : Bool
	{
		textfield._visible = v;
		return v;
	}

	// }}}
	
	// {{{ public function getWidth() : Float
	
	public function getWidth() : Float
	{
		return textfield.textWidth;
	}

	// }}}
	// {{{ public function setWidth( v:Float ) : Float
	
	public function setWidth( v:Float ) : Float
	{
		textfield.textWidth = v;
		textfield._width = v;
		return v;
	}

	// }}}
	// {{{ public function getHeight() : Float
	
	public function getHeight() : Float
	{
		return textfield.textHeight;
	}

	// }}}
	// {{{ public function setHeight( v:Float ) : Float
	
	public function setHeight( v:Float ) : Float
	{
		textfield.textHeight = v;
		textfield._height = v;
		return v;
	}

	// }}}
	// {{{ public function getTextWidth() : Float
	
	public function getTextWidth() : Float
	{
		return textfield.textWidth;
	}

	// }}}
	// {{{ public function setTextWidth( v:Float ) : Float
	
	public function setTextWidth( v:Float ) : Float
	{
		textfield.textWidth = v;
		textfield._width = v;
		return v;
	}

	// }}}
	// {{{ public function getTextHeight() : Float
	
	public function getTextHeight() : Float
	{
		return textfield.textHeight;
	}

	// }}}
	// {{{ public function setTextHeight( v:Float ) : Float
	
	public function setTextHeight( v:Float ) : Float
	{
		textfield.textHeight = v;
		textfield._height = v;
		return v;
	}

	// }}}
	// {{{ public function getType() : String
	
	public function getType() : String
	{
		return textfield.type;
	}

	// }}}
	// {{{ public function setType( v:String ) : String
	
	public function setType( v:String ) : String
	{
		textfield.type = v;
		return v;
	}

	// }}}
	// {{{ public function getSelectable() : Bool
	
	public function getSelectable() : Bool
	{
		return textfield.selectable;
	}

	// }}}
	// {{{ public function setSelectable( v:Bool ) : Bool
	
	public function setSelectable( v:Bool ) : Bool
	{
		textfield.selectable = v;
		return v;
	}

	// }}}
	// {{{ public function getAutoSize() : String
	
	public function getAutoSize() : String
	{
		return textfield.autoSize;
	}

	// }}}
	// {{{ public function setAutoSize( v:String ) : String
	
	public function setAutoSize( v:String ) : String
	{
		textfield.autoSize = v;
		return v;
	}

	// }}}
	// {{{ public function getText() : String
	
	public function getText() : String
	{
		return textfield.text;
	}

	// }}}
	// {{{ public function setText( v:String ) : String
	
	public function setText( v:String ) : String
	{
		textfield.text = v;
		return v;
	}

	// }}}
	// {{{ public function getMultiline() : Bool
	
	public function getMultiline() : Bool
	{
		return textfield.multiline;
	}

	// }}}
	// {{{ public function setMultiline( v:Bool ) : Bool
	
	public function setMultiline( v:Bool ) : Bool
	{
		textfield.multiline = v;
		return v;
	}

	// }}}
	// {{{ public function getTextColor() : Int
	
	public function getTextColor() : Int
	{
		return textfield.textColor;
	}

	// }}}
	// {{{ public function setTextColor( v:Int ) : Int
	
	public function setTextColor( v:Int ) : Int
	{
		textfield.textColor = v;
		return v;
	}

	// }}}
	// {{{ public function getBorder() : Bool
	
	public function getBorder() : Bool
	{
		return textfield.border;
	}

	// }}}
	// {{{ public function setBorder( v:Bool ) : Bool
	
	public function setBorder( v:Bool ) : Bool
	{
		textfield.border = v;
		return v;
	}

	// }}}
	// {{{ public function getBorderColor() : Int
	
	public function getBorderColor() : Int
	{
		return textfield.borderColor;
	}

	// }}}
	// {{{ public function setBorderColor( v:Int ) : Int
	
	public function setBorderColor( v:Int ) : Int
	{
		textfield.borderColor = v;
		return v;
	}

	// }}}
	// {{{ public function getBackground() : Bool
	
	public function getBackground() : Bool
	{
		return textfield.background;
	}

	// }}}
	// {{{ public function setBackground( v:Bool ) : Bool
	
	public function setBackground( v:Bool ) : Bool
	{
		textfield.background = v;
		return v;
	}

	// }}}
	// {{{ public function getBackgroundColor() : Int
	
	public function getBackgroundColor() : Int
	{
		return textfield.backgroundColor;
	}

	// }}}
	// {{{ public function setBackgroundColor( v:Int ) : Int
	
	public function setBackgroundColor( v:Int ) : Int
	{
		textfield.backgroundColor = v;
		return v;
	}

	// }}}
	// {{{ public function setDefaultTextFormat( format:flash.TextFormat ) : flash.TextFormat
	
	public function setDefaultTextFormat( format:flash.TextFormat ) : flash.TextFormat
	{
		textfield.setTextFormat( format );
		_defaultTextFormat = format;
		return format;
	}

	// }}}
	// {{{ public function getDefaultTextFormat() : flash.TextFormat
	
	public function getDefaultTextFormat() : flash.TextFormat
	{
		return textfield.getTextFormat();
	}

	// }}}
	// {{{ public function setTextFormat( format:TextFormat, ?begin:Int, ?end:Int ) : Void
	
	public function setTextFormat( format:TextFormat, ?begin:Int, ?end:Int ) : Void
	{
		textfield.setTextFormat( begin, end, format );
	}

	// }}}
}
